昨天在將我們的應用程序部屬的時候,其實K8s默默幫我們做了許多事情,就讓我們來介紹部屬完之後發生了甚麼事。
當我們要部屬應用程序時就會創建用來承載的Pod,Pod會綁定在K8s安排的節點上保持到其被終止或刪除。每個Pod可以當作是一個具有Volumes並共享namespace的Docker,能夠擁有Volumes、運行的配置以及唯一的cluster IP位址,Pod更可以透過共享同個IP位址及端口達成一個Pod包含多個容器的情況。如圖(一)為部屬完應用程序後的Pod結構。
圖(一) Pods結構
Node昨天提到過是一個個單獨的VM用來運行應用程序,而一個Node中可以擁有多個Pod。在運行上會由Master來處理連接在其身上的所有Node調度Pod的方法。如圖(二)為部屬完應用程序後的包含各個Pod的Node結構。
圖(二) Node結構
在將我們的應用程序部屬的時候,是不是都不知道應用程序的狀態是如何呢?K8s有提供了幾種觀察的方式可以用來故障排除。我們將會使用以下幾種指命來觀察及排查錯誤
顯示資源,包含名稱、當前狀態、重啟狀態、壽命等
顯示資源的詳細資訊
映出Pod的log
在Pod中的container執行命令
kubectl get
kubectl get pods
執行完的輸出
NAME READY STATUS RESTARTS AGE
kubernetes-bootcamp-57978f5f5d-bhq2s 1/1 Running 0 59m
kubectl describe
kubectl describe pods
執行完的輸出
NAME READY STATUS RESTARTS AGE
kubernetes-bootcamp-57978f5f5d-bhq2s 1/1 Running 0 59m
PS C:\Users\liang> kubectl describe pods
Name: kubernetes-bootcamp-57978f5f5d-bhq2s
Namespace: default
Priority: 0
Node: minikube/172.17.0.3
Start Time: Tue, 22 Sep 2020 21:56:17 +0800
Labels: app=kubernetes-bootcamp
pod-template-hash=57978f5f5d
Annotations: <none>
Status: Running
IP: 172.18.0.2
IPs:
IP: 172.18.0.2
Controlled By: ReplicaSet/kubernetes-bootcamp-57978f5f5d
Containers:
kubernetes-bootcamp:
Container ID:
...(太長省略)
kubectl logs
kubectl logs kubernetes-bootcamp-57978f5f5d-bhq2s
可以透過訪問API映出LOG
PS ~User> kubectl exec -ti kubernetes-bootcamp-57978f5f5d-bhq2s bash
# 進入container執行命令
root@kubernetes-bootcamp-57978f5f5d-bhq2s:/# curl localhost:8080
# 訪問localhost:8080
執行完的輸出
Kubernetes Bootcamp App Started At: 2020-09-22T13:57:45.802Z | Running On: kubernetes-bootcamp-57978f5f5d-bhq2s
Running On: kubernetes-bootcamp-57978f5f5d-bhq2s | Total Requests: 1 | App Uptime: 4596.365 seconds | Log Time: 2020-09-22T15:14:22.167Z
kubectl exec
kubectl exec kubernetes-bootcamp-57978f5f5d-bhq2s env
執行完的輸出
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=kubernetes-bootcamp-57978f5f5d-bhq2s
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
KUBERNETES_SERVICE_HOST=10.96.0.1
KUBERNETES_SERVICE_PORT=443
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_PORT=tcp://10.96.0.1:443
NPM_CONFIG_LOGLEVEL=info
NODE_VERSION=6.3.1
HOME=/root
原本是打算在今天學習並撰寫部屬後的架構及概念、觀察及排查錯誤的方法以及K8s Services的概念還有expose APP的方法,一方面是擔心篇幅過長,另一方面就是只來得及把前兩個打成文章。
因此,明天的目標就是學習K8s Services的概念還有expose APP的方法。
參考文獻:
Kubernetes官方文件